#!/bin/bash

# 设置镜像仓库路径和标签
REPOSITORY_PATH='registry.cn-hangzhou.aliyuncs.com/mamy/service'
TAG='1.0.0'

# 打包函数
# 作业中不使用
package() {
  # 在上一级目录执行maven命令，跳过测试
  mvn clean package -Dmaven.test.skip -f ../pom.xml
  # 进入yueyang-ui目录
  cd ../yueyang-ui || exit
  # 安装npm依赖
  npm install --registry=https://registry.npmmirror.com --unsafe-perm
  # 执行prod模式的构建
  npm run build:prod
}

# 移动函数
move() {
  # 网关服务
  MALL_GATEWAY='../mall-gateway/target/mall-gateway.jar'
  if [ -f "${MALL_GATEWAY}" ]; then
    # 如果mall-gateway.jar存在
    if [ ! -d './mall-gateway/java' ]; then
      # 如果mall-gateway/java目录不存在，则创建
      mkdir ./mall-gateway/java
    fi
    # 将mall-gateway.jar移动到mall-gateway/java目录下
    mv ${MALL_GATEWAY} ./mall-gateway/java
  fi

  # 用户服务
  USER_SERVICE='../user-service/target/user-service.jar'
  if [ -f "${USER_SERVICE}" ]; then
    # 如果user-service.jar存在
    if [ ! -d './service-user/java' ]; then
      # 如果./service-user/java目录不存在，则创建
      mkdir ./service-user/java
      mv ${USER_SERVICE} ./service-user/java
    fi
  fi

  # 商品服务
  ITEM_SERVICE='../item-service/target/item-service.jar'
  if [ -f "${ITEM_SERVICE}" ]; then
    # 如果item-service.jar存在
    if [ ! -d './service-item/java' ]; then
      # 如果./service-item/java目录不存在，则创建
      mkdir ./service-item/java
      mv ${ITEM_SERVICE} ./service-item/java
    fi
  fi

  # 购物车服务
  CART_SERVICE='../cart-service/target/cart-service.jar'
  if [ -f "${CART_SERVICE}" ]; then
    # 如果cart-service.jar存在
    if [ ! -d './service-cart/java' ]; then
      # 如果./service-cart/java目录不存在，则创建
      mkdir ./service-cart/java
      mv ${CART_SERVICE} ./service-cart/java
    fi
  fi

  # 交易服务
  TRADE_SERVICE='../trade-service/target/trade-service.jar'
  if [ -f "${TRADE_SERVICE}" ]; then
    # 如果trade-service.jar存在
    if [ ! -d './service-trade/java' ]; then
      # 如果./service-trade/java目录不存在，则创建
      mkdir ./service-trade/java
      mv ${TRADE_SERVICE} ./service-trade/java
    fi
  fi

  # 支付服务
  PAY_SERVICE='../pay-service/target/pay-service.jar'
  if [ -f "${PAY_SERVICE}" ]; then
    # 如果pay-service.jar存在
    if [ ! -d './service-pay/java' ]; then
      # 如果./service-pay/java目录不存在，则创建
      mkdir ./service-pay/java
      mv ${PAY_SERVICE} ./service-pay/java
    fi
  fi

#  # 前端服务
#  UI_DIR='../yueyang-ui/dist'
#  if [ -d "${UI_DIR}" ]; then
#    # 如果dist目录存在
#    if [ -d "./yueyang-ui/dist" ]; then
#      # 如果yueyang-ui/dist目录存在，则删除
#      rm -rf ./yueyang-ui/dist
#    fi
#    # 将dist目录移动到yueyang-ui目录下
#    mv ${UI_DIR} ./yueyang-ui
#  fi

  # 数据库
  SQL_DIR='./mall-mysql/sql'
  if [ -d "${SQL_DIR}" ]; then
    # 如果sql目录存在，则删除
    rm -rf "${SQL_DIR}"
  fi
  # 将上一级目录的sql目录复制到./mall-mysql/sql目录下
  cp -r ../others/sql ./mall-mysql/sql
  # 进入./mall-mysql/sql目录
  cd mall-mysql/sql || exit
  # 将所有的sql文件打包成tar.gz压缩文件
  tar -zcvf init_sql.tar.gz *.sql
  # 删除所有的sql文件
  rm -rf *.sql
}

# 构建函数
build() {
  # 获取当前目录路径
  CURRENT_DIR=$(pwd)
  # 查找所有的Dockerfile文件
  DOCKERFILES=$(find . -name Dockerfile)
  for DOCKERFILE in ${DOCKERFILES}; do
    # 获取Dockerfile所在的目录
    BUILD_DIR="${DOCKERFILE%/*}"
    # 获取模块名称
    MODULE_NAME=${BUILD_DIR##*-}
    # 构建目录路径
    BUILD_DIR="${CURRENT_DIR}${BUILD_DIR#*.}"
    # 进入构建目录
    cd "${BUILD_DIR}" || exit
    # 构建docker镜像
    docker build -t "${REPOSITORY_PATH}${MODULE_NAME}:${TAG}" .
  done
}

# 推送函数
push() {
  # 获取镜像列表
  IMAGE_LIST=$(docker images | grep "${REPOSITORY_PATH}" | awk '{print $1":"$2}')
  if [ -n "${IMAGE_LIST}" ]; then
    # 如果镜像列表不为空
    for IMAGE in ${IMAGE_LIST}; do
      # 推送每个镜像
      docker push "${IMAGE}"
    done
  fi
}

# 清理函数
clean() {
  # 在上一级目录执行maven清理命令
  mvn clean -f ../pom.xml
  # 查找所有的java目录
  ALL_JAVA_DIRS=$(find . -name java)
  if [ -n "${ALL_JAVA_DIRS}" ]; then
    # 如果java目录列表不为空
    for JAVA_DIR in ${ALL_JAVA_DIRS}; do
      # 删除每个java目录
      rm -rf "${JAVA_DIR}"
    done
  fi
#  if [ -d "../yueyang-ui/dist" ]; then
#    # 如果上一级目录的yueyang-ui/dist目录存在，则删除
#    rm -rf ../yueyang-ui/dist
#  fi
#  if [ -d "./yueyang-ui/dist" ]; then
#    # 如果yueyang-ui/dist目录存在，则删除
#    rm -rf ./yueyang-ui/dist
#  fi
#  if [ -d "./yueyang-mysql/sql" ]; then
#      # 如果yueyang-mysql/sql目录存在，则删除
#      rm -rf ./yueyang-mysql/sql
#  fi
  # 获取镜像列表
  IMAGE_LIST=$(docker images | grep "${REPOSITORY_PATH}" | awk '{print $1":"$2}')
  if [ -n "${IMAGE_LIST}" ]; then
    # 如果镜像列表不为空
    for IMAGE in ${IMAGE_LIST}; do
      # 强制删除每个镜像
      docker rmi -f "${IMAGE}"
    done
  fi
}

# 根据命令参数执行相应的操作
case $1 in
"package")
  package
  ;;
"move")
  move
  ;;
"build")
  build
  ;;
"push")
  push
  ;;
"clean")
  clean
  ;;
*)
  echo "未找到命令$1，命令执行格式："
  echo "mamy.sh command"
  echo "command: {package|move|build|push|clean}"
  echo "package: 将项目打包"
  echo "move: 将打包好的项目移动到构建空间"
  echo "build: 将项目打成docker包"
  echo "push: 推送构建好的docker包"
  echo "clean: 清理构建残余"
  ;;
esac
